<?php
namespace Admin\Controller;
use Common\Controller\PublicController;
//权限控制器
class AuthController extends PublicController
{
	//权限列表
	public function authList(){
		$auth=M('Auth');
		//定义where查询条件
		$where=array();//where初始为空数组
		//判断是否有查询条件
		if(IS_POST){
			$option=I("post.option");
			$post=I("post.where");
			switch ($option) {
				case 1:
					$where['auth_name']=array('like',"%{$post}%");
					break;
				case 2:
					$where['auth_c']=array('like',"%{$post}%");
					break;
				case 3:
					$where['auth_a']=array('like',"%{$post}%");
					break;
				case 4:
					$where['auth_level']=array('like',"%{$post}%");
					break;
				default:
					$where['auth_name']=array('like',"%{$post}%");
					break;
			}
		}
		//分页
		//查询满足要求的记录数
		$count=$auth->where($where)->count();
		// 实例化分页类 传入总记录数和每页显示的记录数
		$page=new \Think\Page($count,50);
		//配置分页显示规则
		$page->rollPage=1;
		$page->lastSuffix = false;
		$page->setConfig('header','%TOTAL_ROW%条数据 %NOW_PAGE%/%TOTAL_PAGE% 页&nbsp;&nbsp;');
        $page->setConfig('first', '首页');
		$page->setConfig('last', '尾页');
		$page->setConfig('prev','上一页');
		$page->setConfig('next','下一页');
		$page->setConfig('theme',"%HEADER% %FIRST% %UP_PAGE% %DOWN_PAGE% %END%");
		/*//分页跳转的时候保证查询条件
		foreach($where as $key=>$val) {
		    $page->parameter.="$key=".urlencode($val).'&';
		}*/
		$show=$page->show();//分页显示输出
		//进行分页数据查询 注意limit方法的参数要使用Page类的属性
		$auth_arr=$auth->where($where)->order('auth_path')->limit($page->firstRow,$page->listRows)->select();
		//替换auth_name
		foreach ($auth_arr as $k => $v) {
			$auth_arr[$k]['auth_name']=str_repeat("----",$v['auth_level']).$v['auth_name'];
		}
		$this->assign('post',$post);
		$this->assign('option',$option);
		$this->assign('auth_arr',$auth_arr);
		$this->assign('page',$show);
		$this->display();
	}

	//权限添加
	public function authAdd(){
		$auth=M('Auth');
		$auth_arr=$auth->order('auth_path')->select();
		//替换auth_name
		foreach ($auth_arr as $k => $v) {
			$auth_arr[$k]['auth_name']=str_repeat("---",$v['auth_level']).$v['auth_name'];
		}
		$this->assign('auth_arr',$auth_arr);
		$this->display();
	}

	//权限添加执行
	public function authAddAction(){
		/**
		 * 权限添加步骤：（先添加再修改）
		 * 1、接收post数据，获取权限auth_name、auth_pid、auth_c、auth_a
		 * 2、先添加已有数据，获得新添加id
		 * 3、通过auth_pid查询父类的auth_path和auth_level
		 * 4、拼装成所需数据、执行修改操作
		 */
		//获取post数据,并排除pid为0时的方法名和控制器名
		$data['auth_name']=I('post.auth_name');
		$data['auth_pid']=I('post.auth_pid');
		if($data['auth_pid']){			
			$data['auth_c']=I('post.auth_c');
			$data['auth_a']=I('post.auth_a');
		}
		//添加已有数据，得到新添加id
		$auth=M('Auth');
		$id=$auth->add($data);

		//通过pid查询父类path和level
		$data1['id']=$id;

		if($data['auth_pid']){
			//pid不为0
			$authp_arr=$auth->find($data['auth_pid']);
			$authp_path=$authp_arr['auth_path'];
			$authp_level=$authp_arr['auth_level'];
			//拼装子类path和level
			$data1['auth_path']=$authp_path."-".$id;
			$data1['auth_level']=$authp_level+1;
		}else{
			//pid为0
			$data1['auth_path']=$id;
			$data1['auth_level']=0;
		}
		//执行修改
		$res=$auth->save($data1);
		if($res){
			// $this->success('添加成功',U('Auth/authList'));
			$da['status']=1;
			$da['msg']='添加成功';
		}else{
			// $this->error('添加失败');
			$da['status']=0;
			$da['msg']='添加失败';
		}
		$this->ajaxReturn($da);
	}
	//权限修改
	public function authEdit(){
		/**
		 * 权限修改实现步骤：
		 * 1.get方式获取当前操作的管理员id
		 * 2.根据id查询think_auth表，获取管理员信息，传入模板（用作表单默认值）
		 * 3.查询think_role表，获取角色信息，传入模板（作用同add页面）
		 */
		$id=I("get.id");		
		$auth_arr=M("Auth")->find($id);	
		$this->assign('id',$id);
		$this->assign('auth_arr',$auth_arr);
		$this->display();
	}

	//权限编辑执行
	public function authEditAction(){
		// $this->display();
		//修改操作页面
		$auth=M("Auth");
		$data['id']=I('post.id');
		$data['auth_name']=I('post.auth_name');
		$data['auth_c']=I('post.auth_c');
		$data['auth_a']=I('post.auth_a');
		$res=$auth->save($data);
		if($res){
			// $this->success("修改成功",U('auth/adminList'));	
			$da['status']=1;
			$da['msg']="修改成功";
		}else{
			// $this->error("修改失败");
			$da['status']=0;
			$da['msg']="修改失败";
		}
			$this->ajaxReturn($da);	
	}

	//权限删除
	public function authDel(){
		//获取id
		$id=I("post.id");
		$auth=M("Auth");
		//查询该权限下是否存在子权限，若存在，则禁止删除
		$auths=$auth->field('id')->getByauth_pid($id);
		if($auths){
			// $this->error('无法删除：存在子权限');
			$data['status']=0;
			$data['msg']='无法删除：存在子权限';
		}else{
			$res=$auth->delete($id);
			if($res){
				// $this->success("删除成功");
				$data['status']=1;
				$data['msg']='删除成功';
			}else{
				// $this->error("删除失败");
				$data['status']=0;
				$data['msg']='删除失败';
			}		
		}
		$this->ajaxReturn($data);
	}
}